package controller

import (
	"im/model"
	"im/service"
	"log"

	"github.com/gin-gonic/gin"
)

type userController struct{}

func NewUserController() *userController {
	return &userController{}
}

func (uc *userController) StartInitUserController(v1 *gin.RouterGroup) {
	v1.POST("/register", uc.register)
	v1.POST("/login", uc.login)

}

func (uc *userController) register(c *gin.Context) {
	var userFinder model.User

	if err := c.ShouldBind(&userFinder); err != nil {
		log.Fatal("userFinder bind data failed", err)
		return
	}

	user, err := new(service.UserService).Register(&userFinder)
	if err != nil {
		c.JSON(200, gin.H{
			"code": "001",
			"msg":  err.Error(),
		})
		log.Println("userService.Register failed", err.Error())
		return
	}
	c.JSON(200, gin.H{
		"code": "200",
		"user": user,
		"msg":  "注册成功！",
	})
	return
}

func (uc *userController) login(c *gin.Context) {
	var users model.User
	if err := c.Bind(&users); err != nil {
		log.Println("data bind failed")
		return
	}
	service := new(service.UserService)
	err := service.Login(users.Mobile, users.PassWord)
	if err != nil {
		log.Println(err.Error())
		c.JSON(200, gin.H{
			"code": "-1",
			"msg":  err.Error(),
		})
		return
	}
	token, err := service.UpdateSingleColumn(users.Mobile, "to_ken")
	if err != nil {
		log.Println(err.Error())
		c.JSON(200, gin.H{
			"code": "-1",
			"msg":  err.Error(),
		})
		return
	}
	user, err := service.FindUser(users)
	if err != nil {
		log.Println(err.Error())
		c.JSON(200, gin.H{
			"code": "-1",
			"msg":  err.Error(),
		})
	}
	c.JSON(200, gin.H{
		"code":  "200",
		"token": token,
		"msg":   "登录成功",
		"user":  user,
	})

}
